﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

//引用传参，减少拷贝，建议用引用传参，好处是实参可以是常量/运算表达式等
void Func(const int& r)
{

}
int main()
{
	int a = 10;
	const int& ra = a;
	const int& rra = 30;

	const int& rb = a * 3;

	double d = 13.14;
	const int& rd = d;
	Func(a);
	Func(10);
	Func(a * 3);
	Func(d);

	return 0;
}


//int main()
//{
//	const int a = 10;
//
//	//权限不可以放大
//	//int& ra = a;
//
//	//权限可以平移
//	const int& ra = a;
//
//	//权限可以缩小
//	int b = 20;
//	const int& rb = b;
//	return 0;
//}


//// 1、参数类型不同
//int Add(int left, int right)
//{
//    cout << "int Add(int left, int right)" << endl;
//
//    return left + right;
//}
//
//double Add(double left, double right)
//{
//    cout << "double Add(double left, double right)" << endl;
//
//    return left + right;
//}
//
//// 2、参数个数不同
//void f()
//{
//    cout << "f()" << endl;
//}
//
//void f(int a)
//{
//    cout << "f(int a)" << endl;
//}
//
//
//// 3、参数类型顺序不同
//void f(int a, char b)
//{
//    cout << "f(int a,char b)" << endl;
//}
//
//void f(char b, int a)
//{
//    cout << "f(char b, int a)" << endl;
//}
//
//
//void f1()
//{
//    cout << "f()" << endl;
//}
//
//void f1(int a = 10)
//{
//    cout << "f(int a)" << endl;
//}
//
//int main()
//{
//    Add(10, 20);
//    Add(10.1, 20.2);
//
//    f();
//    f(10);
//
//    f(10, 'a');
//    f('a', 10);
//
//    return 0;
//}

//typedef int STDataType;
//typedef struct Stack
//{
//	STDataType* a;
//	int top;
//	int capacity;
//}ST;
//void STInit(ST& rs, int n = 4)
//{
//	rs.a = (STDataType*)malloc(n * sizeof(STDataType));
//	rs.top = 0;
//	rs.capacity = n;
//}
//// 栈顶
//void STPush(ST & rs, STDataType x)
//{
//	 // 满了， 扩容
//	if (rs.top == rs.capacity)
//		 {
//			printf("扩容\n");
//			int newcapacity = rs.capacity == 0 ? 4 : rs.capacity * 2;
//			STDataType * tmp = (STDataType*)realloc(rs.a, newcapacity *sizeof(STDataType));
//		if (tmp == NULL)
//		{
//			perror("realloc fail");
//			return;
//		}
//			rs.a = tmp;
//			rs.capacity = newcapacity;
//		}
//			rs.a[rs.top] = x;
//			rs.top++;
//}
//
//// int STTop(ST& rs)
//int& STTop(ST & rs)
//{
//	assert(rs.top > 0);
//	return rs.a[rs.top];
//}
//
//int main()
//{
//// 调⽤全局的
//	ST st1;
//	STInit(st1);
//	STPush(st1, 1);
//	STPush(st1, 2);
//
//	cout << STTop(st1) << endl;
//	
//	STTop(st1) += 10;
//	cout << STTop(st1) << endl;
//
//	return 0;
//}

//void Swap(int* x, int* y)
//{
//	int tmp = *x;
//	*x = *y;
//	*y = tmp;
//}
//int main()
//{
//	int x = 1;
//	int y = 2;
//	cout << "交换之前:x = " << x << " y = " << y << endl;
//	Swap(&x, &y);
//	cout << "交换之后:x = " << x << " y = " << y << endl;
//	return 0;
//}
//
//void Swap(int& x, int& y)
//{
//	int  tmp = x;
//	x = y;
//	y = tmp;
//}
//int main()
//{
//	int x = 1;
//	int y = 2;
//	cout << "交换之前:x = " << x << " y = " << y << endl;
//	Swap(x, y);
//	cout << "交换之后:x = " << x << " y = " << y << endl;
//	return 0;
//}

//int main()
//{
//	int a = 0;
//	
//	int& b = a;
//	int& c = a;
//	int& d = b;
//
//	int e = 10;
//	b = e;
//
//	cout << a << endl;
//	cout << b << endl;
//	cout << c << endl;
//	cout << d << endl;
//	cout << e << endl;
//
//	cout << &a << endl;
//	cout << &b << endl;
//	cout << &c << endl;
//	cout << &d << endl;
//	cout << &e << endl << endl;
//	return 0;
//}


//int main()
//{
//	int a = 0;
//	
//	//引用 : b 和 c 是 a 的别名
//	int& b = a;
//	int& c = a;
//
//	//也可以给别名取别名
//	int& d = b;
//
//	++d;
//
//	//指向同一块的空间
//	cout << &a << endl;
//	cout << &b << endl;
//	cout << &c << endl;
//	cout << &d << endl;
//	return 0;
//}

//int main()
//{
//	int a = 0;
//	double b = 0.1;
//	char c = 'a';
//
//	cout << a << " " << b << " " << c << endl;
//	std::cout << a << " " << b << " " << c <<std:: endl;
//
//	//没有包含<stdio.h>，也可以使用print和scanf,在包含<iostream>间接包含了
//	//vs编译器是这样的，其他编译器可能会报错
//	scanf("%d%lf", &a, &b);
//	printf("%d %lf\n", a, b);
//
//	//可以自动识别类型
//	cin >> a;
//	cin >> b >> c;
//
//	cout << a << endl;
//	cout << b << " " << c << endl;
//
//	return 0;
//}


//#include<iostream>
//using namespace std;
//
////全缺省
//void Func1(int a = 10,int b = 20,int c=30)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
//
////半缺省
//void Func2(int a, int b = 10, int c = 20)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
//
//int main()
//{
//	Func1();
//	Func1(1);
//	Func1(1,2);
//	Func1(1,2,3);
//
//	Func2(100);
//	Func2(100,200);
//	Func2(100,200,300);
//	return 0;
//}
